package com.cloud.rest;

import lombok.Getter;
import lombok.Setter;

/**
 * 公共异常编码，适用于所有项目的异常可以维护在此枚举类中；<br/>
 * 特定项目业务异常，可以参考本类在各自项目中自行定义。
 *
 * @Author: HongBo.Zhu
 * @Date: 2021/8/10 09:39
 */
@Getter
public enum EnumGlobalError implements BaseDiyError {

    /** 系统异常：0~9 */
    SUCCESS("0", "success", "success"),
    RPC_ERROR("001", "系统内部错误，请联系管理员!", "RPC调用异常"),
    METHOD_ERROR("002", "系统内部错误，请联系管理员!", "方法调用异常"),
    MEDIA_ERROR("003", "系统内部错误，请联系管理员!", "方法多媒体类型参数异常"),
    SQL_ERROR("004", "系统内部错误，请联系管理员!", "数据库操作SQL语句异常"),
    NULL_POINT_ERROR("006", "系统内部错误，请联系管理员!", "空指针异常"),
    BUSINESS_ERROR("009", "系统内部错误，请联系管理员!", "特定业务异常"),
    SYSTEM_ERROR("999", "系统内部错误，请联系管理员!", "未分类的系统异常"),

    /** 网关和权限：101~199 */
    /* 不合法的凭证(用户名密码错误,appid/secret错误等) */
    AUTH_ILLEGAL_CERTIFICATE("101", "登录信息不正确，请确认后重试！", "用户名或密码错误！"),
    /* 非法的token */
    AUTH_ILLEGAL_TOKEN("102", "会话异常，请重新登录！", "TOKEN失效或非法TOKEN！"),
    /* 无操作权限 */
    AUTH_NO_AUTHORIZATION("103", "无操作权限，请联系管理员！", "禁止跨权限调用！"),

    /** 参数：201~299 */
    PARAM_ILLEGAL("201", "请求参数错误，请确认后重试！", "请求参数错误，请确认后重试！"),
    PARAM_TOO_LONG("202", "请求参数过长，请删减后重试！", "请求参数过长，请删减后重试！"),
    PARAM_NULL_VALUE("203", "必填参数不能为空！", "必填参数不能为空！"),
    PARAM_OUT_RANGE("204", "超出参数有效范围！", "超出参数有效范围！"),

    /** 安全和加解密：301~309 */
    AES_KEY_NULL("301", "系统内部错误，请联系管理员!", "AES密钥不能为空"),
    AES_ENCRYPT_ERROR("302", "系统内部错误，请联系管理员!", "AES加密过程出错"),
    AES_DECRYPT_ERROR("302", "系统内部错误，请联系管理员!", "AES解密过程出错"),

    ;

    /** 异常编码 */
    @Setter
    private String code;
    /** 展示给用户的提示信息 */
    @Setter
    private String msg;
    /** 异常详情描述 */
    @Setter
    private String detail;

    EnumGlobalError(String code, String msg, String detail) {
        this.code = code;
        this.msg = msg;
        this.detail = detail;
    }

}
